import { notFound, redirect } from "next/navigation"; import { OrderDirection, ProductOrderField, SearchProductsDocument } from "@/gql/graphql"; import { executeGraphQL } from "@/lib/graphql"; import { Pagination } from "@/ui/components/Pagination"; import { ProductList } from "@/ui/components/ProductList"; import { ProductsPerPage } from "@/app/config"; export const metadata = { title: "Search products ยท Saleor Storefront example", description: "Search products in Saleor Storefront example", }; export default async function Page({ searchParams, params, }: { searchParams: Record<"query" | "cursor", string | string[] | undefined>; params: { channel: string }; }) { const cursor = typeof searchParams.cursor === "string" ? searchParams.cursor : null; const searchValue = searchParams.query; if (!searchValue) { notFound(); } if (Array.isArray(searchValue)) { const firstValidSearchValue = searchValue.find((v) => v.length > 0); if (!firstValidSearchValue) { notFound(); } redirect(`/search?${new URLSearchParams({ query: firstValidSearchValue }).toString()}`); } const { products } = await executeGraphQL(SearchProductsDocument, { variables: { first: ProductsPerPage, search: searchValue, after: cursor, sortBy: ProductOrderField.Rating, sortDirection: OrderDirection.Asc, channel: params.channel, }, revalidate: 60, }); if (!products) { notFound(); } const newSearchParams = new URLSearchParams({ query: searchValue, ...(products.pageInfo.endCursor && { cursor: products.pageInfo.endCursor }), }); return (
{products.totalCount && products.totalCount > 0 ? (

Search results for "{searchValue}":

e.node)} />
) : (

Nothing found :(

)}
); }